<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="renderer" content="webkit">
        <title>OA自动化办公系统</title>
        <!-- 避免IE使用兼容模式 -->
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <link th:href="@{favicon.ico}" rel="stylesheet"/>
        <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
        <link th:href="@{/css/jquery.contextMenu.min.css}" rel="stylesheet"/>
        <link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
        <link th:href="@{/css/animate.css}" rel="stylesheet"/>
        <link th:href="@{/css/style.css}" rel="stylesheet"/>
        <link th:href="@{/css/skins.css}" rel="stylesheet"/>
        <link th:href="@{/ruoyi/css/ry-ui.css?v=4.3.0}" rel="stylesheet"/>
        <link th:href="@{/ajax/libs/enjoyhint/enjoyhint.css}" rel="stylesheet">
    </head>
    <body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden">
        <audio autoplay="autoplay" id="auto" src=""></audio>
        <div id="wrapper">
            <!--左侧导航开始-->
            <nav class="navbar-default navbar-static-side" role="navigation">
                <div class="nav-close">
                    <i class="fa fa-times-circle"></i>
                </div>
                <a th:href="@{/index}">
                    <li class="logo hidden-xs">
                        <span class="logo-lg">OA自动化办公系统</span>
                    </li>
                </a>
                <div class="sidebar-collapse">
                    <ul class="nav" id="side-menu">
                        <li>
                            <div class="user-panel">
                                <a class="menuItem noactive" title="个人中心" th:href="@{/system/user/profile}">
                                    <div class="hide" th:text="个人中心"></div>
                                    <div class="pull-left image">
                                        <img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="img-circle" alt="User Image">
                                    </div>
                                </a>
                                <div class="pull-left info">
                                    <p>[[${user.loginName}]]</p>
                                    <a href="#"><i class="fa fa-circle text-success"></i> 在线</a>
                                    <a th:href="@{logout}" style="padding-left:5px;"><i class="fa fa-sign-out text-danger"></i> 注销</a>
                                </div>
                            </div>
                        </li>
                        <li>
                            <a class="menuItem" th:href="@{/system/main}"><i class="fa fa-home"></i> <span class="nav-label">首页</span> </a>
                        </li>
                        <li th:each="menu : ${menus}">
                            <a th:class="@{${menu.url != '' && menu.url != '#'} ? ${menu.target}}" th:href="@{${menu.url == ''} ? |#| : ${menu.url}}">
                                <i class="fa fa-bar-chart-o" th:class="${menu.icon}"></i>
                                <span class="nav-label" th:text="${menu.menuName}">一级菜单</span>
                                <span th:class="${menu.url == '' || menu.url == '#'} ? |fa arrow|"></span>
                            </a>
                            <ul class="nav nav-second-level collapse">
                                <li th:each="cmenu : ${menu.children}">
                                    <a th:if="${#lists.isEmpty(cmenu.children)}" th:class="${cmenu.target == ''} ? |menuItem| : ${cmenu.target}" th:utext="${cmenu.menuName}" th:href="@{${cmenu.url}}">二级菜单</a>
                                    <a th:if="${not #lists.isEmpty(cmenu.children)}" href="#">[[${cmenu.menuName}]]<span class="fa arrow"></span></a>
                                    <ul th:if="${not #lists.isEmpty(cmenu.children)}" class="nav nav-third-level">
                                        <li th:each="emenu : ${cmenu.children}">
                                            <a th:if="${#lists.isEmpty(emenu.children)}" th:class="${emenu.target == ''} ? |menuItem| : ${emenu.target}" th:text="${emenu.menuName}" th:href="@{${emenu.url}}">三级菜单</a>
                                            <a th:if="${not #lists.isEmpty(emenu.children)}" href="#">[[${emenu.menuName}]]<span class="fa arrow"></span></a>
                                            <ul th:if="${not #lists.isEmpty(emenu.children)}" class="nav nav-four-level">
                                                <li th:each="fmenu : ${emenu.children}"><a th:if="${#lists.isEmpty(fmenu.children)}" th:class="${fmenu.target == ''} ? |menuItem| : ${fmenu.target}" th:text="${fmenu.menuName}" th:href="@{${fmenu.url}}">四级菜单</a></li>
                                            </ul>
                                        </li>
                                    </ul>
                                </li>
                            </ul>
                        </li>
                        <li th:if="${demoEnabled}">
                            <a href="#"><i class="fa fa-desktop"></i><span class="nav-label">实例演示</span><span class="fa arrow"></span></a>
                            <ul class="nav nav-second-level collapse">
                                <li><a>表单<span class="fa arrow"></span></a>
                                    <ul class="nav nav-third-level">
                                        <li><a class="menuItem" th:href="@{/demo/form/button}">按钮</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/grid}">栅格</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/select}">下拉框</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/timeline}">时间轴</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/basic}">基本表单</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/cards}">卡片列表</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/jasny}">功能扩展</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/sortable}">拖动排序</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/tabs_panels}">选项卡 & 面板</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/validate}">表单校验</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/wizard}">表单向导</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/upload}">文件上传</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/datetime}">日期和时间</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/summernote}">富文本编辑器</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/duallistbox}">左右互选组件</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/autocomplete}">搜索自动补全</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/form/cxselect}">多级联动下拉</a></li>
                                    </ul>
                                </li>
                                <li><a>表格<span class="fa arrow"></span></a>
                                    <ul class="nav nav-third-level">
                                        <li><a class="menuItem" th:href="@{/demo/table/search}">查询条件</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/footer}">数据汇总</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/groupHeader}">组合表头</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/export}">表格导出</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/remember}">翻页记住选择</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/pageGo}">跳转至指定页</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/params}">自定义查询参数</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/multi}">初始多表格</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/button}">点击按钮加载表格</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/data}">直接加载表格数据</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/fixedColumns}">表格冻结列</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/event}">自定义触发事件</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/detail}">表格细节视图</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/child}">表格父子视图</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/image}">表格图片预览</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/curd}">动态增删改查</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/reorder}">表格拖拽操作</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/editable}">表格行内编辑</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/subdata}">主子表提交</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/table/other}">表格其他操作</a></li>
                                    </ul>
                                </li>
                                <li><a>弹框<span class="fa arrow"></span></a>
                                    <ul class="nav nav-third-level">
                                        <li><a class="menuItem" th:href="@{/demo/modal/dialog}">模态窗口</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/modal/layer}">弹层组件</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/modal/table}">弹层表格</a></li>
                                    </ul>
                                </li>
                                <li><a>操作<span class="fa arrow"></span></a>
                                    <ul class="nav nav-third-level">
                                        <li><a class="menuItem" th:href="@{/demo/operate/table}">表格</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/operate/other}">其他</a></li>
                                    </ul>
                                </li>
                                <li><a>报表<span class="fa arrow"></span></a>
                                    <ul class="nav nav-third-level">
                                        <li><a class="menuItem" th:href="@{/demo/report/echarts}">百度ECharts</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/report/peity}">peity</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/report/sparkline}">sparkline</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/report/metrics}">图表组合</a></li>
                                    </ul>
                                </li>
                                <li><a>图标<span class="fa arrow"></span></a>
                                    <ul class="nav nav-third-level">
                                        <li><a class="menuItem" th:href="@{/demo/icon/fontawesome}">Font Awesome</a></li>
                                        <li><a class="menuItem" th:href="@{/demo/icon/glyphicons}">Glyphicons</a></li>
                                    </ul>
                                </li>
                                <li>
                                    <a href="#"><i class="fa fa-sitemap"></i>四层菜单<span class="fa arrow"></span></a>
                                    <ul class="nav nav-third-level collapse">
                                        <li>
                                            <a href="#" id="damian">三级菜单1<span class="fa arrow"></span></a>
                                            <ul class="nav nav-third-level">
                                                <li>
                                                    <a href="#">四级菜单1</a>
                                                </li>
                                                <li>
                                                    <a href="#">四级菜单2</a>
                                                </li>
                                            </ul>
                                        </li>
                                        <li><a href="#">三级菜单2</a></li>
                                    </ul>
                                </li>
                            </ul>
                        </li>
                    </ul>
                </div>
            </nav>
            <!--左侧导航结束-->

            <!--右侧部分开始-->
            <div id="page-wrapper" class="gray-bg dashbard-1">
                <div class="row border-bottom">
                    <nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
                        <div class="navbar-header">
                            <a class="navbar-minimalize minimalize-styl-2" style="color:#FFF;" href="#" title="收起菜单">
                                <i class="fa fa-bars"></i>
                            </a>
                        </div>
                        <div class="navbar-header" th:if="${weather}">
                            <iframe class="thisWeather" style="padding: 12px;" scrolling="no" height="50" frameborder="0" allowtransparency="true" src="https://i.tianqi.com?c=code&id=34&color=%23FFFFFF&icon=1&num=5&site=16"></iframe>
                        </div>
                        <ul class="nav navbar-top-links navbar-right welcome-message">
                            <li><a title="全屏显示" href="javascript:void(0)" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏显示</a></li>
                            <li><a title="今日待办事项" data-toggle="modal" data-target="#schedule">今日待办事项 <span class="badge" th:text="${schedules.size()}"></span></a></li>
                            <li class="dropdown user-menu">
                                <a href="javascript:void(0)" class="dropdown-toggle" data-hover="dropdown">
                                    <img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="user-image">
                                    <span class="hidden-xs">[[${#strings.defaultString(user.userName, '-')}]]</span>
                                </a>
                                <ul class="dropdown-menu">
                                    <li class="mt5">
                                        <a th:href="@{/system/user/profile}" class="menuItem">
                                            <i class="fa fa-user"></i> 个人中心</a>
                                    </li>
                                    <li>
                                        <a onclick="resetPwd()">
                                            <i class="fa fa-key"></i> 修改密码</a>
                                    </li>
                                    <li>
                                        <a onclick="switchSkin()">
                                            <i class="fa fa-dashboard"></i> 切换主题</a>
                                    </li>
                                    <li class="divider"></li>
                                    <li>
                                        <a th:href="@{logout}">
                                            <i class="fa fa-sign-out"></i> 退出登录</a>
                                    </li>
                                </ul>
                            </li>
                        </ul>
                    </nav>
                </div>
                <div class="row content-tabs">
                    <button class="roll-nav roll-left tabLeft">
                        <i class="fa fa-backward"></i>
                    </button>
                    <nav class="page-tabs menuTabs">
                        <div class="page-tabs-content">
                            <a href="javascript:;" class="active menuTab" data-id="/system/main">首页</a>
                        </div>
                    </nav>
                    <button class="roll-nav roll-right tabRight">
                        <i class="fa fa-forward"></i>
                    </button>
                    <a href="javascript:void(0);" class="roll-nav roll-right tabReload"><i class="fa fa-refresh"></i> 刷新</a>
                </div>

                <a id="ax_close_max" class="ax_close_max" href="#" title="关闭全屏"> <i class="fa fa-times-circle-o"></i> </a>

                <div class="row mainContent" id="content-main">
                    <iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" data-id="/system/main"
                            th:src="@{/system/main}" frameborder="0" seamless></iframe>
                </div>
                <div class="footer">
                    <div class="pull-right">© [[${copyrightYear}]] FeiFan Copyright</div>
                </div>
            </div>
            <!--右侧部分结束-->
        </div>

        <div class="modal inmodal" id="schedule" tabindex="-1" role="dialog" aria-hidden="true">
            <div class="modal-dialog">
                <div class="modal-content animated bounceInRight">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">关闭</span></button>
                        <h4 class="modal-title">待办事项</h4>
                    </div>
                    <div class="modal-body">
                        <div class="form-group">
                            <ul class="list-group">
                                <li class="list-group-item"style="background-color: white;" th:each="s : ${schedules}" th:text="${s.title}"></li>
                            </ul>
                        </div>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-white" data-dismiss="modal">确定</button>
                    </div>
                </div>
            </div>
        </div>
        <!-- 全局js -->
        <script th:src="@{/js/jquery.min.js}"></script>
        <script th:src="@{/js/bootstrap.min.js}"></script>
        <script th:src="@{/js/plugins/metisMenu/jquery.metisMenu.js}"></script>
        <script th:src="@{/js/plugins/slimscroll/jquery.slimscroll.min.js}"></script>
        <script th:src="@{/js/jquery.contextMenu.min.js}"></script>
        <script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
        <script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
        <script th:src="@{/ruoyi/js/ry-ui.js?v=4.3.0}"></script>
        <script th:src="@{/ruoyi/js/common.js?v=4.3.0}"></script>
        <script th:src="@{/ruoyi/index.js}"></script>
        <script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
        <script th:src="@{/ajax/libs/enjoyhint/enjoyhint.min.js}"></script>
        <script th:src="@{/js/jquery.cookie.js}"></script>


        <script th:inline="javascript">
            var ctx = [[@{/}]];
            // 皮肤缓存
            var skin = storage.get("skin");
            // history（表示去掉地址的#）否则地址以"#"形式展示
            var mode = "history";
            // 历史访问路径缓存
            var historyPath = storage.get("historyPath");
            // 是否页签与菜单联动
            var isLinkage = true;

            // 本地主题优先，未设置取系统配置
            if ($.common.isNotEmpty(skin)) {
                $("body").addClass(skin.split('|')[0]);
                $("body").addClass(skin.split('|')[1]);
            } else {
                $("body").addClass([[${sideTheme}]]);
                $("body").addClass([[${skinName}]]);
            }

            /* 用户管理-重置密码 */
            function resetPwd() {
                var url = ctx + 'system/user/profile/resetPwd';
                $.modal.open("重置密码", url, '770', '380');
            }

            /* 切换主题 */
            function switchSkin() {
                layer.open({
                    type: 2,
                    shadeClose: true,
                    title: "切换主题",
                    area: ["530px", "386px"],
                    content: [ctx + "system/switchSkin", 'no']
                })
            }

            /** 刷新时访问路径页签 */
            function applyPath(url) {
                $('a[href$="' + decodeURI(url) + '"]').click();
                if (!$('a[href$="' + url + '"]').hasClass("noactive")) {
                    $('a[href$="' + url + '"]').parent("li").addClass("selected").parents("li").addClass("active").end().parents("ul").addClass("in");
                }
            }

            $(function () {
                if ($.common.equals("history", mode) && window.performance.navigation.type == 1) {
                    var url = storage.get('publicPath');
                    if ($.common.isNotEmpty(url)) {
                        applyPath(url);
                    }
                } else {
                    var hash = location.hash;
                    if ($.common.isNotEmpty(hash)) {
                        var url = hash.substring(1, hash.length);
                        applyPath(url);
                    }
                }
            });
        </script>

        <!--WebSocket-->
        <script th:inline="javascript">
            var userId = [[${user.userId}]]
            var socket; //websocket的实例
            var lockReconnect = false; //避免重复连接

            $().ready(function () {
                getwebsocket();
            })

            function getwebsocket() {
                //新建websocket的函数 页面初始化 断开连接时重新调用
                let protocol = location.protocol === 'https:'
                    ? 'wss://' + window.location.host
                    : 'ws://' + window.location.host;
                var wsUrl = protocol + '/webSocket/' + userId;
                socket = new WebSocket(wsUrl);
                socket.onerror = function (event) {
                    reconnect(wsUrl);
                };
                socket.onclose = function (event) {
                    reconnect(wsUrl);
                };
                socket.onopen = function (event) {
                    console.log("websocket服务连接成功")
                    heartCheck.reset().start(); //传递信息
                };
                socket.onmessage = function (event) {

                    //判断是否是代办事件提醒
                    if (event.data.substring(0, 5) == "`/`?`") {
                        //声音提醒
                        var auto = $("#auto");
                        auto.attr("src", "/提示音.mp3");
                        doWithMsg(event.data.slice(5, event.data.length));
                    }
                    //如果获取到消息，心跳检测重置
                    //拿到任何消息都说明当前连接是正常的
                    //接受消息后的UI变化
                    heartCheck.reset().start();
                };


                //收到消息推送
                function doWithMsg(msg) {
                    layer.open({
                        type: 1
                        , title: false //不显示标题栏
                        , closeBtn: false
                        , area: '300px;'
                        , shade: 0.8
                        , btn: ['确定']
                        , btnAlign: 'c'
                        , moveType: 1 //拖拽模式，0或者1
                        , content: '<div style="padding: 50px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;">' + msg + '</div>'
                        , success: function (layero) {

                        }
                    });
                }
            }

            /**
             * webScoket重连
             */
            function reconnect() {
                if (lockReconnect) return;
                lockReconnect = true;
                //没连接上会一直重连，设置延迟避免请求过多
                setTimeout(function () {
                    getwebsocket();
                    lockReconnect = false;
                }, 4000);
            }

            //心跳检测
            var heartCheck = {
                timeout: 12000, //120秒
                timeoutObj: null,
                serverTimeoutObj: null,
                reset: function () {
                    clearTimeout(this.timeoutObj);
                    clearTimeout(this.serverTimeoutObj);
                    return this;
                },
                start: function () {
                    var self = this;
                    this.timeoutObj = setTimeout(function () {
                        //这里发送一个心跳，后端收到后，返回一个心跳消息，
                        //onmessage拿到返回的心跳就说明连接正常
                        socket.send("心跳测试");
                        self.serverTimeoutObj = setTimeout(function () { //如果超过一定时间还没重置，说明后端主动断开了
                            socket.close(); //如果onclose会执行reconnect，我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
                        }, self.timeout)
                    }, this.timeout)
                }
            }
        </script>

        <!--EnjoyHint向导-->
        <script th:inline="javascript">
            $(function () {
                if ($.cookie("enjoyhint") == null) {
                    $.cookie("enjoyhint", "1", {
                        expires: 30 //设置时间，如果此处留空，则浏览器关闭此cookie就失效。
                    });
                    var enjoyhint_instance = new EnjoyHint({});

                    var enjoyhint_script_steps = [
                        {
                            'next .logo-lg': '欢迎来到OA自动化办公系统！让我来引导你了解它的特点。',
                            'nextButton': {className: "myNext", text: "开始"},
                            'skipButton': {className: "mySkip", text: "关闭"}
                        },
                        {
                            'next .thisWeather': '这可以帮助你查看每天的天气状况。',
                            'nextButton': {className: 'myNext', text: "下一步"}
                        },
                        {
                            'next .dropdown': '这里是个人信息。',
                            'nextButton': {className: 'myNext', text: "下一步"}
                        },
                        {
                            'next .sidebar-collapse': '这里是操作菜单。',
                            'showSkip': false,
                            'nextButton': {className: "myNext", text: "知道了!"}
                        }
                    ];

                    enjoyhint_instance.set(enjoyhint_script_steps);
                    enjoyhint_instance.run();
                }
            })
        </script>
    </body>
</html>
